package com.reportes;

import java.util.ArrayList;

import java.util.Calendar;
import java.util.Iterator;
import java.util.List;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.BarChart.Type;
import org.achartengine.model.SeriesSelection;

import clasesGraficas.Consultas;
import clasesGraficas.Estados;
import clasesGraficas.VentasN1;
import clasesGraficas.VentasN2;
import clasesGraficas.VentasN3;

import com.BD.*;
import com.ventas.Venta_Canal;
import com.ventas.Venta_Distrito;
import com.ventas.Venta_Edad;
import com.ventas.Venta_Genero;
import com.ventas.Venta_Promotor;
import com.ventas.Venta_Promotor_Nivel3;
import com.ventas.Venta_TipoEvento;
import com.ventas.VentasGenerales;

import android.app.ActionBar;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class Reporte_Cancelaciones extends Activity {
	/**
	 * @see android.app.Activity#onCreate(Bundle)
	 */

		
	//### Graficar ###/
	GraphicalView mChartView = null;
	int[] anios = null;
	int[] meses = null;
	int[] ventasAnio = null;
	int[] ventasMes = null;
	String[] datos = null;
	String tituloGrafica = "";
	LinearLayout layoutGrafica = null;
	boolean anual = false;
	//################
	Intent intPromotorN3 = null;
	public String titulo = "";
	public int flagTiempo = 0; // 1=mes && 2=trimenstre && 3=anno
	public int flagLima = 0;
	public int flagProvincia = 0;
	public int flagNivel=0; 
	
	private Button pickDateInicio;
    private int anhoInicio;
    private int mesInicio;
    private int diaInicio;
    
    private Button pickDateFin;
    private int anhoFin;
    private int mesFin;
    private int diaFin;
    private View view;
    
    
   // private BD_SQLite aux;
    
   
    
    static final int DATE_DIALOG_Inicial = 0;
    static final int DATE_DIALOG_Final = 1;
    
    private TextView mDateDisplayInicio,mDateDisplayFin;
	
	/**
	 * @see android.app.Activity#onCreate(Bundle)
	 */
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		
		
		super.onCreate(savedInstanceState);
		setContentView(R.layout.cancelaciones);
		
		mDateDisplayInicio = (TextView) findViewById(R.id.textView2);
		mDateDisplayFin = (TextView) findViewById(R.id.textView3);
		
		pickDateInicio = (Button) findViewById(R.id.btnInicio);

		pickDateInicio.setOnClickListener(new View.OnClickListener() {
		            public void onClick(View v) {
		                showDialog(DATE_DIALOG_Inicial);
		            }
		        });
		        
		final Calendar c = Calendar.getInstance();
		anhoInicio = c.get(Calendar.YEAR);
		mesInicio = c.get(Calendar.MONTH);
		diaInicio = c.get(Calendar.DAY_OF_MONTH);
		
		pickDateFin = (Button) findViewById(R.id.btnFin);

		pickDateFin.setOnClickListener(new View.OnClickListener() {
		            public void onClick(View v) {
		                showDialog(DATE_DIALOG_Final);
		            }
		        });
		        
		anhoFin = c.get(Calendar.YEAR);
		mesFin = c.get(Calendar.MONTH);
		diaFin = c.get(Calendar.DAY_OF_MONTH);
		
		
		Resources res = getResources();
		Drawable myImage = res.getDrawable(R.drawable.background2);		
		ActionBar actionBar = this.getActionBar();
		actionBar.setBackgroundDrawable(myImage);
		actionBar.setDisplayUseLogoEnabled(true);
		actionBar.setDisplayShowTitleEnabled(false);
	  
		
		
	}
	
	
	public int calcularperiodos(int anhoF,int anhoI, int mesF, int mesI , int diaF,int diaI,int per){
	int result=0;
	
	if (per==1){
	result= (anhoF*365+(mesF-1)*30+diaF - anhoI*365+(mesI-1)*30+diaI) / 30 + 1 ;
	}	
	return result;	
	}
	
	public int calcularPeriodo( String fecha,int nperiodos)
	{
		int r=10;
	
		return r;
	}
	
	
	
	@SuppressWarnings({ "rawtypes", "null" })
	public int[] NroEstados (ArrayList<Tabla_Evento> infoEven, String periodo , String estado, String ubicacion){
    		
    		int[] nestados=null;
    		
    		
    		
    		int Nperiodos=calcularperiodos(anhoFin,anhoInicio,mesFin,mesInicio,diaFin, diaInicio,1);
    		
    		for (int i=0;i<Nperiodos;i++)
    			nestados[i]=0;
    			
    		Iterator i = infoEven.iterator();
    		int cont=0;
    	
    		
    		if (periodo.equals("mes")){
    			Nperiodos=calcularperiodos(anhoFin,anhoInicio,mesFin,mesInicio,diaFin, diaInicio,1); 
    			
    		}
    		
    		while(i.hasNext())
    		{
    			if (periodo.equals("mes")&&(ubicacion.equals("Lima"))){
    				
    				if (infoEven.get(cont).getNomEstadoEvento().equals(estado)) {
    					int n=calcularPeriodo(infoEven.get(cont).getFecCreacion(),Nperiodos);
    					nestados[n]=nestados[n]+1;
    				}
    				
    			}
    			
    			if (periodo.equals("Trimestre")&&(ubicacion.equals("Lima"))){
    				
    				
    			}
    				
    			if (periodo.equals("anho")&&(ubicacion.equals("Lima"))){
    				
    				
    			}
    			
    			if (periodo.equals("mes")&&(ubicacion.equals("Provincias"))){
    				
    				
    				
    			}
    			if (periodo.equals("Trimestre")&&(ubicacion.equals("Provincias"))){
    				
    				
    			}
    				
    			if (periodo.equals("anho")&&(ubicacion.equals("Provincias"))){
    				
    				
    			}
    			
    			
    		}
    			
    	
    	return nestados;
    }
	
	
	protected Dialog onCreateDialog(int id) {
		   switch (id) {
		   case DATE_DIALOG_Inicial:
		    DatePickerDialog dialogoInicio =new DatePickerDialog(this,
		                    mDateSetListenerInicio, anhoInicio, mesInicio, diaInicio);
		    
		    dialogoInicio.getDatePicker();
			   
		    return dialogoInicio;
		    
		   case DATE_DIALOG_Final:
			    DatePickerDialog dialogoFin =new DatePickerDialog(this,
			                    mDateSetListenerFin, anhoFin, mesFin, diaFin);
			    
			    dialogoFin.getDatePicker();
		   
		    return dialogoFin;
		   }
		   return null;
	}
	
	private DatePickerDialog.OnDateSetListener mDateSetListenerInicio = new DatePickerDialog.OnDateSetListener() {
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        	anhoInicio = year;
        	mesInicio = monthOfYear;
        	diaInicio = dayOfMonth;
        	
        	mDateDisplayInicio.setText(new StringBuilder()
			// Month is 0 based so add 1
            .append(mesInicio + 1).append("-")
            .append(diaInicio).append("-")
            .append(anhoInicio).append(" "));
        }
	};
	
	private DatePickerDialog.OnDateSetListener mDateSetListenerFin = new DatePickerDialog.OnDateSetListener() {
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        	anhoFin = year;
        	mesFin = monthOfYear;
        	diaFin = dayOfMonth;
        	
        	mDateDisplayFin.setText(new StringBuilder()
			// Month is 0 based so add 1
            .append(mesFin + 1).append("-")
            .append(diaFin).append("-")
            .append(anhoFin).append(" "));        	
        }
	};
	
	
	public void GenerarReporte(View view){
		
		int numeroInicial = anhoInicio*10000+mesInicio*100+diaInicio;
		int numeroFinal = anhoFin*10000+mesFin*100+diaFin;
		
		if (( ( flagProvincia == 0 && flagLima==0) || flagTiempo == 0)== false) {
		
			if(numeroFinal>=numeroInicial){
				
				int mesinicialnumero = (mesInicio) % 4 ;
				int mesfinalnumero = (mesFin) % 4 ;
				//Toast.makeText(this, mesinicialnumero+"", Toast.LENGTH_LONG).show();
				//Toast.makeText(this, mesfinalnumero+"", Toast.LENGTH_LONG).show();
				
				if((mesinicialnumero!=0 || mesfinalnumero!=0) && flagTiempo==2){
					
					Toast.makeText(this, "Los meses no coinciden para el trimestre", Toast.LENGTH_LONG).show();
					
				}else{
					
					
						
						double[] e4 = {50, 60 ,80 , 60};
						double [] e3 = {100+e4[0], 200+e4[1], 300+e4[2], 400+e4[3]};
						double [] e2 = {200+e3[0], 400+e3[1], 450+e3[2], 600+e3[3]};
						double [] e1 = {250+e2[0], 500+e2[1], 550+e2[2], 700+e2[3]};
						List<double[]> eventos = new ArrayList<double[]>();
						eventos.add(e1);
						eventos.add(e2);
						eventos.add(e3);
						eventos.add(e4);
						
						String[] titulos = {"Cancelado", "En ejecución", "Finalizado","Postergado"};
						
						Estados Estadoxperiodo = new Estados();
						Estadoxperiodo.ejecutar(eventos, titulos);
						
						this.layoutGrafica = (LinearLayout)findViewById(R.id.idpanelgraficoEstados);
				
			
						this.mChartView = ChartFactory.getBarChartView(this,Estadoxperiodo.getDataset(), 
								Estadoxperiodo.getmRenderer(),Type.STACKED);
						layoutGrafica.removeAllViews();
					    layoutGrafica.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,
						               LayoutParams.FILL_PARENT));
					  
						Toast.makeText(this, "Se genera el reporte de Estados", Toast.LENGTH_LONG).show();
						
						/*this.mChartView.setOnClickListener(new View.OnClickListener() {
							@Override
							public void onClick(View arg0) {
								SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint();
								if (seriesSelection == null) {} 
						        else{
						        	intPromotorN3 =getIntent();
						        	startActivity(intPromotorN3);
						        }
							}
						});
						*/
						
				}}}
				}	
	
	
	public void establecerColorTiempo(View view){
		
		
		Button buttonMensuales = (Button) findViewById(R.id.btnMensuales);
		Button buttonAnuales = (Button) findViewById(R.id.btnAnho);
		Button buttonTrimestrales = (Button) findViewById(R.id.btnTrimestres);
	
		if (buttonMensuales.isPressed()){
			
			anual = false;
			Drawable d1 = buttonMensuales.getBackground();
            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
            d1.setColorFilter(filter);
			
			
			Drawable d2 = buttonAnuales.getBackground();
            findViewById(R.id.btnAnho).invalidateDrawable(d2);
            d2.clearColorFilter();
			
            Drawable d3 = buttonTrimestrales.getBackground();
            findViewById(R.id.btnTrimestres).invalidateDrawable(d3);
            d3.clearColorFilter();
            
			flagTiempo=1;
			
			
		}
		if (buttonAnuales.isPressed()){
			
			anual = true;
			Drawable d1 = buttonAnuales.getBackground();
            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
            d1.setColorFilter(filter);

			
			Drawable d2 = buttonMensuales.getBackground();
            findViewById(R.id.btnMensuales).invalidateDrawable(d2);
            d2.clearColorFilter();
			
            Drawable d3 = buttonTrimestrales.getBackground();
            findViewById(R.id.btnTrimestres).invalidateDrawable(d3);
            d3.clearColorFilter();
            
			flagTiempo=3;
		
		}
		if (buttonTrimestrales.isPressed()) {
			
			anual = false;
			Drawable d1 = buttonTrimestrales.getBackground();
            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
            d1.setColorFilter(filter);

			
			Drawable d2 = buttonMensuales.getBackground();
            findViewById(R.id.btnMensuales).invalidateDrawable(d2);
            d2.clearColorFilter();
			
            Drawable d3 = buttonAnuales.getBackground();
            findViewById(R.id.btnAnho).invalidateDrawable(d3);
            d3.clearColorFilter();
            
			flagTiempo=2;
			
		}
		
		
	}
	
	
	public void establecerColorUbicacion(View view){	

		Button buttonLima = (Button) findViewById(R.id.btnLima);
		Button buttonProvincia = (Button) findViewById(R.id.btnProvincia);
        
        if (buttonLima.isPressed()){
        	if (flagLima == 0) {
        		Drawable d1 = buttonLima.getBackground();
                PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
                d1.setColorFilter(filter);
    			flagLima=1;
        	}
        	else{
        		Drawable d2 = buttonProvincia.getBackground();
                findViewById(R.id.btnLima).invalidateDrawable(d2);
                d2.clearColorFilter();
                flagLima=0;
        	}
		}
        
		if (buttonProvincia.isPressed()){
			
			if(flagProvincia==0){
				Drawable d1 = buttonProvincia.getBackground();
	            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
	            d1.setColorFilter(filter);
				flagProvincia=1;
			}
			else{
				Drawable d2 = buttonLima.getBackground();
	            findViewById(R.id.btnProvincia).invalidateDrawable(d2);
	            d2.clearColorFilter();
	            flagProvincia=0;
			}
		}
	}


		
		public boolean onCreateOptionsMenu(Menu menu) {
		        MenuInflater inflater = getMenuInflater();
		        inflater.inflate(R.menu.menuprincipal, menu);
		        return true;
		    }
		
		@Override
		public boolean onOptionsItemSelected(MenuItem item) {
		    // Handle item selection
		    switch (item.getItemId()) {
		        case R.id.logout:
		        	Intent logo = new Intent(this,login.class);
		        	startActivity(logo);
		            return true;
		        case R.id.ventas:
		        	Intent ventas = new Intent(this,VentasGenerales.class);
		        	startActivity(ventas);
		            return true;
		        case R.id.consultas:
		        	Intent consultas = new Intent(this,login.class);
		        	startActivity(consultas);
		            return true;
		        case R.id.cancelaciones:
		        	Intent cancelaciones = new Intent(this,Reporte_Cancelaciones.class);
		        	startActivity(cancelaciones);
		            return true;
		        case R.id.evolutivo:
		        	Intent evolutivo = new Intent(this,csmmm.class);
		        	startActivity(evolutivo);
		            return true;
		        default:
		            return super.onOptionsItemSelected(item);
		    }
		}	
	}
